| Definición |
Patrón de diseño que desacopla la lógica de negocio del resto de la infraestructura utilizando puertos y adaptadores. |
Un patrón que implementa un backend intermedio que maneja las solicitudes y respuestas específicas para un frontend o un conjunto de frontends. |
| Objetivo Principal |
Separar la lógica de negocio de la infraestructura para facilitar la escalabilidad y los cambios. |
Mejorar la comunicación entre frontend y backend optimizando datos y respuestas específicas para diferentes clientes. |
| Tipo de Arquitectura |
Desacoplada, centrada en el dominio. |
Capa intermedia, centrada en las necesidades del frontend. |
| Nivel de Abstracción |
Bajo: Trabaja a nivel de servicios y lógica de negocio. |
Alto: Maneja la lógica de interfaz y comunicación entre frontend y backend. |
| Independencia de Tecnologías |
Muy alta: Permite cambiar la infraestructura sin afectar el dominio. |
Moderada: Está estrechamente acoplado a las necesidades del cliente frontend. |
| Flexibilidad |
Alta: Permite cambiar adaptadores y servicios sin afectar la lógica de negocio. |
Media: La flexibilidad se ve limitada por la necesidad de adaptar el backend para cada tipo de cliente (por ejemplo, web, móvil). |
| Mantenibilidad |
Alta: Las interfaces y adaptadores facilitan el mantenimiento a largo plazo. |
Moderada: Si no se maneja adecuadamente, puede generar código redundante y difícil de mantener. |
| Reusabilidad |
Alta: El núcleo de la aplicación se puede reutilizar con diferentes adaptadores. |
Baja: Está diseñado específicamente para un frontend o un conjunto pequeño de clientes. |
| Escalabilidad |
Muy alta: El sistema es fácilmente escalable ya que el backend está desacoplado. |
Moderada: Requiere más esfuerzo si se tiene que escalar a múltiples frontends (requiere múltiples BFFs). |
| Complejidad en la Implementación |
Alta: Se requiere un diseño cuidadoso de puertos y adaptadores. |
Baja a moderada: Se puede implementar rápidamente, pero puede volverse complejo con múltiples clientes. |
| Cohesión y Acoplamiento |
Muy alta cohesión y bajo acoplamiento dentro del dominio. |
Alta dependencia entre el BFF y el frontend, aunque desacoplado de la lógica de negocio. |
| Latencia |
Media: Depende de la infraestructura y adaptadores utilizados. |
Baja: Puede reducir la latencia al consolidar la lógica en un solo punto de entrada. |
| Tiempo de Respuesta |
Depende de los microservicios; puede haber múltiples saltos. |
Bajo: Optimiza y reduce las llamadas al backend y la cantidad de datos enviados al frontend. |
| Adaptación a Cambios en el Frontend |
No está enfocado a cambios en frontend, más orientado al backend. |
Alta: Permite adaptaciones rápidas a cambios específicos en los frontends sin alterar la lógica backend. |
| Dependencia de Frameworks |
Puede ser independiente del framework, sólo depende de los puertos y adaptadores. |
Fuertemente dependiente de las tecnologías del frontend, como React, Angular, iOS, etc. |
| Seguridad |
Flexibilidad para aplicar seguridad en diferentes capas (backend, servicios, etc.). |
Permite aplicar seguridad específica para cada tipo de cliente (autenticación, roles, etc.). |
| Dependencia de Microservicios |
Totalmente compatible con microservicios; los puertos permiten consumir múltiples servicios sin acoplarse a ellos. |
Requiere consumir microservicios, pero lo hace de manera optimizada para el frontend. |
| Manejo de Estados |
Depende del diseño; es más adecuado para sistemas sin estado. |
Puede manejar el estado en el frontend y simplificar las respuestas del backend para mejorar la experiencia del usuario. |